为了证明表达式模板思想的复杂性，我们已经在数组操作上提高了性能。在跟踪表达式模板时，会发现许多小型内联函数相互调用，并且在调用堆栈上分配了许多小型表达式模板对象。优化器必须执行完整的内联和消除小对象，以产生与手动编码循环一样有效的代码。本书的第一版中，我们说过很少有编译器能够实现这样的优化。但从那时起，情况有了很大的改善，部分原因是因为该技术很受欢迎。

表达式模板技术不能解决涉及数组数值操作的所有问题。不适用于这种形式的矩阵-向量乘法

x = A*x;

其中x是一个大小为n的列向量，a是一个n × n的矩阵。问题是必须使用一个临时元素，因为结果中的每个元素都依赖于原始x中的每个元素。但表达式模板循环会更新x的第一个元素，然后使用新计算的元素来计算第二个元素，这是错误的。另一个稍有不同的表达

x = A*y;

另一方面，若x和y不是彼此的别名，则不需要临时变量，从而解决方案必须在运行时知道操作数的关系。这里建议创建一个表示表达式运行时的树型结构，而不是用表达式模板的类型对树型结构进行编码。这种方法是由Robert Davies的NewMat库首创的(见[NewMat])。早在表达式模板开发出来之前，这种方式就已经很出名了。

















































